package com.qq5194102.chaindestroy;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;

public final class ChainDestroy extends JavaPlugin {
    private PluginConfig config;

    @Override
    public void onEnable() {
        // 加载并保存默认配置
        saveDefaultConfig();
        config = new PluginConfig(getConfig());

        // 注册事件监听器
        getServer().getPluginManager().registerEvents(new VeinMinerListener(this, config), this);
        getServer().getPluginManager().registerEvents(new TreeFellerListener(this, config), this);

        getLogger().info("连锁挖矿+砍树插件已启用 - 配置: 最大挖矿连锁=" + config.MAX_VEIN_BLOCKS + ", 最大砍树连锁=" + config.MAX_TREE_BLOCKS);
    }

    @Override
    public void onDisable() {
        getLogger().info("插件已禁用");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        // 确保是主命令
        if (!cmd.getName().equalsIgnoreCase("chaindestroy")) {
            return false;
        }

        // 处理reload子命令
        if (args.length > 0 && args[0].equalsIgnoreCase("reload")) {
            return handleReload(sender);
        }

        // 显示帮助信息
        showHelp(sender);
        return true;
    }

    /**
     * 处理/reload命令
     * @param sender 命令发送者
     * @return 命令是否成功执行
     */
    private boolean handleReload(CommandSender sender) {
        // 权限检查
        if (!sender.hasPermission("chaindestroy.reload")) {
            sender.sendMessage("§c你没有权限执行此命令!");
            return true;
        }

        try {
            // 重载配置文件
            reloadConfig();
            config = new PluginConfig(getConfig());

            // 发送成功消息
            sender.sendMessage("§a配置已重载完成!");
            sender.sendMessage("§7- 最大挖矿连锁: §e" + config.MAX_VEIN_BLOCKS);
            sender.sendMessage("§7- 最大砍树连锁: §e" + config.MAX_TREE_BLOCKS);
            sender.sendMessage("§7- SHIFT触发: §e" + (config.REQUIRE_SNEAKING ? "启用" : "禁用"));
            getLogger().info("配置已重载");
            return true;
        } catch (Exception e) {
            // 错误处理
            sender.sendMessage("§c配置重载失败! 请检查控制台错误信息");
            getLogger().severe("配置重载失败: " + e.getMessage());
            e.printStackTrace();
            return true;
        }
    }

    /**
     * 显示插件帮助信息
     * @param sender 命令发送者
     */
    private void showHelp(CommandSender sender) {
        sender.sendMessage("§6=== §eChainDestroy §6插件帮助 ===");
        sender.sendMessage("§7一款连锁破坏插件，需要有权限且下蹲破坏才会连锁");
        sender.sendMessage("§7目前支持的：镐子破坏矿物、斧头破坏原木");
        sender.sendMessage("§7/chaindestroy reload §e- 重载插件配置（需要权限）");
        sender.sendMessage("§7/chaindestroy help §e- 显示此帮助信息");
        sender.sendMessage("");
        sender.sendMessage("§7当前版本: §e" + getDescription().getVersion());
        sender.sendMessage("§7作者: §e" + String.join(", ", getDescription().getAuthors()));
    }

    /**
     * 插件配置类
     */
    public static class PluginConfig {
        public final int MAX_VEIN_BLOCKS;   // 挖矿最大连锁方块数
        public final int MAX_TREE_BLOCKS;   // 砍树最大连锁原木数
        public final boolean REQUIRE_SNEAKING;  // 是否需要按住SHIFT触发

        public PluginConfig(org.bukkit.configuration.Configuration config) {
            this.MAX_VEIN_BLOCKS = config.getInt("VeinMiner.max-blocks", 30);
            this.MAX_TREE_BLOCKS = config.getInt("TreeFeller.max-blocks", 30);
            this.REQUIRE_SNEAKING = config.getBoolean("General.sneak-trigger", true);
        }
    }
}